package com.funi.utils;


import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**********************************************************************
 * &lt;p&gt;文件名：ListToJsonFileWithJackson.java &lt;/p&gt;
 * &lt;p&gt;文件描述：(描述该文件做什么) 
 * @project_name：code_total
 * @author zengshunyao
 * @create 2025/10/9 15:20
 * @history
 * @department：政务事业部
 * Copyright ChengDu Funi Cloud Code Technology Development CO.,LTD 2014 
 *                    All Rights Reserved.
 */
@Slf4j
public class ListToJsonFileWithJackson {
    public static void main(String[] args) {
        // 1. 创建一个示例List集合
        List<String> dataList = new ArrayList<>();
        dataList.add("Java");
        dataList.add("Python");
        dataList.add("JavaScript");

        //定义输出文件路径
        String filePath = "output_jackson.json";

        printCollectJsonStringToFile(filePath, dataList);
        printStringToFile(filePath, JSON.toJSONString(dataList));
    }

    /**
     * 打印1
     *
     * @param filePath 文件
     * @param dataList 数据集合
     */
    public static void printCollectJsonStringToFile(final String filePath, final Collection<?> dataList) {
        // 2. 创建Gson对象（可使用GsonBuilder进行个性化配置，如设置漂亮打印）
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 3. 定义输出文件路径
        //String filePath = "output.json";

        try (FileWriter writer = new FileWriter(filePath)) {
            // 4. 将List转换为JSON字符串并直接写入文件
            gson.toJson(dataList, writer);
            log.info("✅ List已成功转换为JSON并写入文件: " + filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 打印2
     *
     * @param filePath   文件
     * @param jsonString 内容
     */
    public static void printStringToFile(final String filePath, final String jsonString) {
        // 2. 定义输出文件
        final File file = new File(filePath);
        try {
            // 4. 将List直接写入文件
            FileWriter writer = new FileWriter(filePath);
            writer.write(jsonString);
            writer.close();
            log.info("✅ 写入文件: " + file.getPath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
